//
//  LSOauthViewController.swift
//  新浪微博---01次
//
//  Created by 李宗帅 on 16/5/4.
//  Copyright © 2016年 LS. All rights reserved.
//

import UIKit
import SVProgressHUD
class LSOauthViewController: UIViewController,UIWebViewDelegate {
    
    let webView: UIWebView = UIWebView()
    
    
    override func loadView() {
        view = webView
        
        setupNav()
    }

    private func setupNav() {
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "dismiss")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: "autofill")
    }
    
    //MARK:--Nav的点击方法
    @objc private func dismiss(){
        
        SVProgressHUD.dismiss()
        
        dismissViewControllerAnimated(true) { () -> Void in
            
        }
    }
    
    @objc private func autofill(){
        
        //代码里实现js注入
        let js = "document.getElementById(\"passwd\").value = \"lishuai19900415\";document.getElementById(\"userId\").value = \"18617028268\""
        
        webView.stringByEvaluatingJavaScriptFromString(js)
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //创建URL
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=1310832748&redirect_uri=www.baidu.com"
        //2.创建一个那是URL 因为这个URL是我们自己写的,能够保证url为非空,所以可以强制解包
        let url = NSURL(string: urlString)!
        
        //3.创建请求
        let request = NSURLRequest(URL: url)
        
        //4.web页面加载
        webView.loadRequest(request)
        
        //设置遵守UIWebViewDelegate
        webView.delegate = self
        
        
    }

}
//第一步
//App Key：1310832748
//App Secret：3412ac81b820d142f76c5cda05591663

//拼接认证的webView页面
//https://api.weibo.com/oauth2/authorize?client_id=1310832748&redirect_uri=www.baidu.com

//https://www.baidu.com/?code=0b13a3e037e40c67ca19861e8be75800
//截取出这个code
extension LSOauthViewController{
    //class  是类方法 类不用创建实例可以直接调用,节省了内存
    //已经开始加载的方法
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    //完成加载的时候调用的方法
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    //加载错误的时候的信息
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
//        SVProgressHUD.showErrorWithStatus(error?.description, maskType: SVProgressHUDMaskType.Black)
        printLog(error?.code)
    }
    
    //加载页面的时候  都会走这个方法
    //相当于  一个门 每次有网络请求的时候 都会走这个方法
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //查看网址的绝对字符串 如果不为空 执行
        if let absoluteString = request.URL?.absoluteString {
            //查看网址的绝对字符串是否有app网址前缀  有的话 执行
            if absoluteString.hasPrefix(AppRedictUrl) {
                
                //截取code  求出网址中的query  也就是网址字符串中有value = Key这种情况
                if let query = request.URL?.query {
                    //截取字符串
                    let code = query.substringFromIndex("code=".endIndex)
                    
                    LSOauthViewModel.shareInstance.loadToken(code, sucess: { () -> () in
                        
                        // 授权界面消失，切换了视图控制器
                        self.dismiss()
                        //切换视图控制器
                        NSNotificationCenter.defaultCenter().postNotificationName(kNotificationChangViewController, object: self)
                        
                        }, failed: { () -> () in
                            // 在这里去处理失败的信息
                            
                    })
//                    loadToken(Code)
                }
                
                return false
            }
        }
        
        return true
    }
}





//通过这个Code,采用Afn来换取token
//第二步
extension LSOauthViewController{
    private func loadToken(code: String){
        let urlString =  "https://api.weibo.com/oauth2/access_token"
//        接口文档 的内容，可以复制到这里,方便我们拼接参数
//        client_id	true	string	申请应用时分配的AppKey。
//        client_secret	true	string	申请应用时分配的AppSecret。
//        grant_type	true	string	请求的类型，填写authorization_code
//        
//        grant_type为authorization_code时
//        必选	类型及范围	说明
//        code	true	string	调用authorize获得的code值。
//        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致
        let parameters = ["client_id":AppKey,"client_secret":AppSecret,"grant_type":"authorization_code","code":code,"redirect_uri":AppRedictUrl]
        
        LSHTTPClicent.shareInstance.request(LSHTTPClientType.POST, URLString: urlString, parameters: parameters, success: { (_, JSON) -> Void in
            printLog(JSON)
            
            //as  as? as!  数据转模型
            //既然JSON是可选,那么我们需要判断一下是否有值
            if let json = JSON as? [String:AnyObject] {
                let model = LSUserAccount(dic: json)
                
                self.loadInfo(model)
                
            }
            
            }) { (_, error) -> Void in
                //failed: unacceptable content-type: text/plain  这种错误代表请求返回的数据不能识别这种类型,那我们就需要在返回请求的方法内添加识别这种类型
        }
        
    }
}


//第三步
extension LSOauthViewController{

    private func loadInfo(model: LSUserAccount){
        guard let uid = model.uid, let token = model.access_token else {
            return
        }
        
        let urlString = "https://api.weibo.com/2/users/show.json"
        
//        access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
//        uid	false	int64	需要查询的用户ID。
//        screen_name	false	string	需要查询的用户昵称。
        
        let parameters = ["access_token":token,"uid":uid]
        
        LSHTTPClicent.shareInstance.request(LSHTTPClientType.GET, URLString: urlString, parameters: parameters, success: { (_, JSON) -> Void in
            
            printLog(JSON)
            
            }) { (_, error) -> Void in
                
                printLog(error.code)
        }
    }

}